package com.zhuanzhuan.hero.user.facade;

import com.bj58.spat.scf.server.contract.annotation.ServiceContract;
import com.bj58.youpin.common.rpc.result.Result;
import com.bj58.zhuanzhuan.zzentry.common.service.entity.ServiceHeaderEntity;
import com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult;
import com.bj58.zhuanzhuan.zzentry.common.service.model.openEntry.ZZHeader;
import com.zhuanzhuan.hero.user.dto.*;
import com.zhuanzhuan.hero.user.vo.*;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @ClassName IUserInfoFacade
 * @Description
 * @Author hanjunjun
 * @Date 2024/6/18 14:55
 */
@ServiceContract
public interface IUserInfoFacade {

    /**
     * scf--查询用户基本信息  可选字段
     *
     * @param queryUserInfoDTO
     * @return com.bj58.youpin.common.rpc.result.Result<com.zhaunzhuan.hero.user.vo.UserBaseInfoVO>
     * @author  hanjunjun
     * @date 2024/6/18
     **/
    Result<UserBaseInfoVO> queryUserBaseInfo(QueryUserInfoDTO queryUserInfoDTO);

    /**
     * 根据联系手机号查询uid
     *
     * @param contactMobile
     * @return com.bj58.youpin.common.rpc.result.Result<java.util.List<java.lang.Long>>
     * @author  hanjunjun
     * @date 2024/6/29
     **/
    Result<List<Long>> queryUidByContactMobile(String contactMobile);

    /**
     * scf-批量查询用户基本信息
     *
     * @param batchQueryUserInfoDTO
     * @return com.bj58.youpin.common.rpc.result.Result<java.util.List<com.zhaunzhuan.hero.user.vo.UserBaseInfoVO>>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    Result<List<UserBaseInfoVO>> batchQueryUserBaseInfo(BatchQueryUserInfoSelectiveDTO batchQueryUserInfoDTO);

    /**
     * scf-批量查询用户详细信息 【我的-同行圈】列表使用
     *
     * @param batchQueryUserInfoSelectiveDTO
     * @param header 调用方透传，解析版本号控制展示会员等级icon
     * @return com.bj58.youpin.common.rpc.result.Result<java.util.List<com.zhaunzhuan.hero.user.vo.UserDetailVO>>
     * @author  hanjunjun
     * @date 2024/6/20
     **/
    Result<List<UserDetailDTO>> batchGetUserDetail(BatchQueryUserInfoDTO batchQueryUserInfoSelectiveDTO, ServiceHeaderEntity header);

    /**
     * scf-批量查询用户详细信息 【首页】列表使用
     *
     * @param queryDTO
     * @param header  透传,用于判断是否隐藏会员等级
     * @return com.bj58.youpin.common.rpc.result.Result<java.util.List<com.zhaunzhuan.hero.user.vo.UserDetailVO>>
     * @author  hanjunjun
     * @date 2024/6/20
     **/
    Result<List<UserDetailVO>> batchGetUserDetail4Homepage(BatchQueryUserInfoDTO queryDTO,
        ServiceHeaderEntity header);

    /**
     * scf-查询用户设置的隐私用户
     *
     * @param uid
     * @return com.bj58.youpin.common.rpc.result.Result<com.zhaunzhuan.hero.user.vo.SetupPrivacyVO>
     * @author  hanjunjun
     * @date 2024/6/18
     **/
    Result<SetupPrivacyVO> queryUserSetupPrivacy(Long uid);

    /**
     * scf-查询用户默认收款方式
     *
     * @param uid
     * @return com.bj58.youpin.common.rpc.result.Result<com.zhaunzhuan.hero.user.vo.UserDefaultPaymentVO>
     * @author  hanjunjun
     * @date 2024/6/18
     **/
    Result<UserPaymentVO> queryUserDefaultPayment(Long uid);

    /**
     * scf-根据登录uid查询认证信息下所有已注册侠客汇的uid、手机号(脱敏)
     *   for会员域
     * @param uid
     * @return com.bj58.youpin.common.rpc.result.Result<com.zhaunzhuan.hero.user.vo.UserRealPersonAuthInfoVO>
     * @author  hanjunjun
     * @date 2024/6/18
     **/
    Result<List<UserRealPersonAuthInfoVO>> queryAllRealPersonAuthUserInfo(Long uid);

    /**
     * 前端-查询回收商设置的端外头像昵称
     *
     * @param header
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhuanzhuan.hero.user.vo.UserBriefInfoVO>
     * @author  hanjunjun
     * @date 2024/7/6
     **/
    ZZOpenScfBaseResult<UserBriefInfoVO> queryOuterInfo(@ZZHeader ServiceHeaderEntity header);

    /**
     * 前端-保存回收商端外展示的昵称、头像
     *
     * @param saveOuterInfoDTO
     * @return com.bj58.youpin.common.rpc.result.Result<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/18
     **/
    ZZOpenScfBaseResult<Boolean> saveOuterInfo(@ZZHeader ServiceHeaderEntity header, SaveOuterInfoDTO saveOuterInfoDTO);

    /**
     * 客户端-查询用户详细信息，包含主态客态
     *
     * @param header
     * @param queryUserDetailDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhaunzhuan.hero.user.vo.UserDetailVO>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<UserDetailVO> queryUserDetailInfo(@ZZHeader ServiceHeaderEntity header, QueryUserDetailDTO queryUserDetailDTO);

    /**
     * 前端-小程序首页查询回收商的详细信息
     *   查询的都是外部展示的头像昵称
     *
     * @param header
     * @param queryUserDetailDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhuanzhuan.hero.user.vo.UserDetailVO>
     * @author  hanjunjun
     * @date 2024/7/18
     **/
    ZZOpenScfBaseResult<UserDetailVO> queryUserDetailInfoOuter(@ZZHeader ServiceHeaderEntity header, QueryUserDetailDTO queryUserDetailDTO);

    /**
     * 前端-查询用户基本信息
     *
     * @param header
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhaunzhuan.hero.user.vo.UserBaseInfoVO>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<UserBaseInfoVO> queryUserBaseInfo(@ZZHeader ServiceHeaderEntity header);

    /**
     * 前端-保存用户基本信息
     *
     * @param header
     * @param saveUserBaseInfoDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<Boolean> saveUserBaseInfo(@ZZHeader ServiceHeaderEntity header, SaveUserBaseInfoDTO saveUserBaseInfoDTO);

    /**
     * 前端-修改封面
     *
     * @param header
     * @param backdrop
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/7/8
     **/
    ZZOpenScfBaseResult<Boolean> saveUserBackdrop(@ZZHeader ServiceHeaderEntity header, String backdrop);

    /**
     * 后端-是否需要隐藏会员等级
     *
     * @param header  透传
     * @return com.bj58.youpin.common.rpc.result.Result<java.lang.Boolean>
     * @author  hanjunjun
     * @date 2024/7/13
     **/
    Result<Boolean> needHideMemberLevel(@NotNull ServiceHeaderEntity header);

    /**
     * 7项资料是否修改完成,用户是否可以被搜索
     * @param uid
     * @return
     */
    Result<Boolean> personInfoPerfection(Long uid);
}
